// 封装一个日期格式化工具，传入日期时间（或字符串） ，返回格式化的字符串
// 时间格式如： 1分钟前、2小时前、3天前、4个月，5年前统一封装到一个函数
export const formatDate = (date: Date | string) => {
  // console.log(date)
  const inputDate = typeof date === 'string' ? new Date(date) : date
  const now = new Date()
  const diff = Math.abs(now.getTime() - inputDate.getTime())

  if (diff < 60 * 1000) {
    return '刚刚'
  }

  const minutes = Math.floor(diff / (1000 * 60))
  if (minutes < 60) {
    return `${minutes} 分钟前`
  }

  const hours = Math.floor(minutes / 60)
  if (hours < 24) {
    return `${hours} 小时前`
  }

  const days = Math.floor(hours / 24)
  if (days < 30) {
    return `${days} 天前`
  }

  const months = Math.ceil(days / 30)
  const years = Math.ceil(months / 12)

  if (years <= 1) {
    return `${months} 个月前`
  } else {
    return `${years} 年前`
  }
}

// const dateStr = '2022-01-01'
// const date = new Date(dateStr)
// console.log(formatDate(date)) // 输出：1 年前

// 使用ts封装一个日期格式化函数，传入2个参数，
// 参数1：具体的时间戳，
// 参数2： "YYYY-MM-DD HH:mm:ss "或者 "YYYY-MM-DD "或者“HH:mm:ss” 格式的字符串 ，
// 返回格式化的时间字符串
export function formatDateTime(
  timestamp: number,
  format: string = 'YYYY-MM-DD HH:mm:ss'
): string {
  const date = new Date(timestamp)

  if (isNaN(date.getTime())) {
    return 'Invalid Date'
  }

  const year = date.getFullYear().toString()
  const month = (date.getMonth() + 1).toString().padStart(2, '0')
  const day = date.getDate().toString().padStart(2, '0')
  const hours = date.getHours().toString().padStart(2, '0')
  const minutes = date.getMinutes().toString().padStart(2, '0')
  const seconds = date.getSeconds().toString().padStart(2, '0')

  return format
    .replace('YYYY', year)
    .replace('MM', month)
    .replace('DD', day)
    .replace('HH', hours)
    .replace('mm', minutes)
    .replace('ss', seconds)
}

// const timestamp = 1634643000000; // 日期时间的时间戳
// const formattedDateTime = formatDateTime(timestamp, "YYYY-MM-DD HH:mm:ss");
// console.log(formattedDateTime); // 输出格式化后的日期时间

// const formattedDate = formatDateTime(timestamp, "YYYY-MM-DD");
// console.log(formattedDate); // 输出格式化后的日期

// const formattedTime = formatDateTime(timestamp, "HH:mm:ss");
// console.log(formattedTime); // 输出格式化后的时间
